/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mwt.xml.xdbforms.schemalayer;

import java.util.Collection;
import mwt.xml.xdbforms.schemalayer.exception.SchemaBuildingException;
import mwt.xml.xdbforms.schemalayer.exception.SchemaQueryException;
import org.w3c.dom.Document;

/**
 * Progetto Master Web Technology
 * @author Gianfranco Murador, Cristian Castiglia, Matteo Ferri
 */
public interface SchemaDocument {

    /**
     * Costruisce lo schema xml in base alla tabella
     * passata per argomento
     * @param table Nome della tabella.
     * @throws mwt.xml.xdbforms.schemalayer.exception.SchemaBuildingException
     */
    public void build(String table,String database,boolean insert) throws SchemaBuildingException;


    /**
     * Ritorna il tipo della colonna contenuto nello schema
     * @param colName nome della colonna
     * @return nome del tipo
     * @throws mwt.xml.xdbforms.schemalayer.exception.SchemaQueryException
     */
    
    public String getColumnType(String colName) throws SchemaQueryException;

    /**
     * Ritorna il nome del tipo della colonna contenuto nel documento
     * in base alla posizione del documento
     * @param id intero cardinale della colonna
     * @return Nome del tipo
     * @throws mwt.xml.xdbforms.schemalayer.exception.SchemaQueryException
     * @deprecated will be removed on next release
     */

    public String getColumnType(int id) throws SchemaQueryException;


    /**
     * Ritorna tutti i nomi dei tipi delle colonne contenuti nel documento
     * @return array di stringhe con i nomi dei tipi
     */

    public String[] getAllColumnsType() throws SchemaQueryException;

    /**
     * Ritorna tutti i nomi delle colonne contenuti nel documento
     * @return array di stringhe con i nomi delle colonne
     */

    public String[] getAllColumnsName() throws SchemaQueryException;


    /**
     * Ritorna il nome del tipo base esteso
     * @param colname nome della colonna
     * @return nome del tipo base relativo alla colonna
     */
   
    public String getColumnBaseType(String colname) throws SchemaQueryException;

    /**
     * Ritorna l'implementazione di Document
     * @return ritorna il documento
     * @throws mwt.xml.xdbforms.schemalayer.exception.SchemaBuildingException
     * @see Document
     */

    public Document getSchemaDocument() throws SchemaBuildingException;


    /**
     * Ritorna il valore di default associato ad una colonna
     * @param colName
     * @return il valore di default associato alla colonna
     * @throws mwt.xml.xdbforms.schemalayer.exception.SchemaQueryException
     */

    public String getDafaultValue(String colName) throws SchemaQueryException;


    /***
     * la colonna ha un riferimento esterno
     * @param colName colonna da considerare
     * @return true se ha un riferimento false altrimenti
     */
    public boolean hasFK(String colName);

    /**
     * Controlla se la colonna ha valori autoincrementali
     * e restituisce il nome del tipo della colonna, null altrimenti
     * @param colName nome della colonna
     * @return ritorna il tipo della colonna se il campo è autoincrement,
     *         mentre ritorna null se non lo e'.
     * 
     */

    public String getAutoincrementTypeName(String colName);

    /**
     * Ritorna il nome della tabella in esame
     * @return nome della tabella
     */

    public String getTableName();



    /**
     * Ritorna i valori ammissibili per un campo enum
     * @param colname nome della colonna
     * @return array di stringhe con i valori ammissibili
     */

    public String[] getEnumValues(String colname);

    /**
     * Ritorna i valori ammissibili per un campo set
     * @param colname nome della colonna
     * @return array di stringhe con i valori ammissibili
     */

    public String[] getSetValues(String colname);




    /**
     *
     */

    public Collection getForeingKeyValue(String colname, String tablename);


    public String[] getAllPrimaryKeysNames();


}
